package com.ht.web_vr_home_tour_backend.service;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ht.web_vr_home_tour_backend.dao.PojRefObjDao;
import com.ht.web_vr_home_tour_backend.obj.pojo.PojRefObj;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class PojRefObjService extends ServiceImpl<PojRefObjDao, PojRefObj> {
    /**
     * 获取所有引用的对象
     * @param pojId 项目id
     * @return 所有引用的对象
     */
    public List<PojRefObj> getAllRefObj(Long pojId) {
        return this.list(
                this.lambdaQuery()
                        .eq(PojRefObj::getPojId, pojId)
                        .getWrapper()
        );
    }

    /**
     * 获取所有引用该对象的项目id
     * @param objId 对象id
     * @return 所有引用该对象的项目
     */
    public List<PojRefObj> getAllRefPoj(Long objId) {
        return this.list(
                this.lambdaQuery()
                        .eq(PojRefObj::getObjId, objId)
                        .getWrapper()
        );
    }

    /**
     * 检查引用是否存在
     * @param pojId 项目id
     * @param objId 对象id
     * @return 引用是否存在
     */
    public boolean checkRefExists(long pojId, long objId) {
        return this.exists(
                this.lambdaQuery()
                        .eq(PojRefObj::getPojId, pojId)
                        .eq(PojRefObj::getObjId, objId)
                        .getWrapper()
        );
    }

    /**
     * 保存引用
     * @param pojId 项目id
     * @param objId 对象id
     */
    public void saveRefObj(long pojId, long objId) {
        if (!checkRefExists(pojId, objId)) {
            PojRefObj entity = new PojRefObj();
            entity.setPojId(pojId);
            entity.setObjId(objId);
            this.save(entity);
        }
    }

    /**
     * 删除引用
     * @param pojId 项目id
     * @param objId 对象id
     */
    public boolean removeRefObj(long pojId, long objId) {
        return this.remove(
                this.lambdaQuery()
                        .eq(PojRefObj::getPojId, pojId)
                        .eq(PojRefObj::getObjId, objId)
                        .getWrapper()
        );
    }
}
